package pe.com.bbva.modpre.persistencia.hibernate;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.com.bbva.modpre.dominio.Ans;
import pe.com.bbva.modpre.dominio.Equipo;
import pe.com.bbva.modpre.persistencia.AnsDAO;
import pe.com.bbva.modpre.utileria.Busqueda;

@Repository
@SuppressWarnings("serial")
public class AnsHibernate extends BaseHibernate<Ans, Long> 
implements AnsDAO {
	
	@Autowired
	public AnsHibernate(SessionFactory sessionFactory){
		setSessionFactory(sessionFactory);
	}

	@Override
	public List<Ans> busquedaANS(Ans ans) {
		List<String> alias=new ArrayList<String>();
		Busqueda filtro = Busqueda.forClass(Ans.class);
		if(ans!=null){
		if(ans.getId()!=null){
			filtro.add(Restrictions.eq("id",
					ans.getId()));
		}
		if(ans.getEquipo()!=null){
			filtro.createAlias("equipo", "e");
			alias.add("e");
			filtro.add(Restrictions.ilike("e.nombre",
					ans.getEquipo().getNombre(), MatchMode.ANYWHERE));
		}
		if(ans.getSegmento()!=null){
			filtro.createAlias("segmento", "s");
			alias.add("s");
			filtro.add(Restrictions.ilike("s.nombre",
					ans.getSegmento().getNombre(), MatchMode.ANYWHERE));
		}
		if(ans.getProducto()!=null){
			filtro.createAlias("producto", "p");
			alias.add("p");
			filtro.add(Restrictions.ilike("p.nombre",
					ans.getProducto().getNombre(), MatchMode.ANYWHERE));
		}
		if(ans.getPrioridadVerde()!=null){
			filtro.add(Restrictions.eq("prioridadVerde",
					ans.getPrioridadVerde()));
		}
		if(ans.getPrioridadAmarillo()!=null){
			filtro.add(Restrictions.eq("prioridadAmarillo",
					ans.getPrioridadAmarillo()));
		}
		if(ans.getPrioridadRojo()!=null){
			filtro.add(Restrictions.eq("prioridadRojo",
					ans.getPrioridadRojo()));
		}
		if(ans.getCreacion()!=null && ans.getEdicion()!=null){
			Calendar desde=Calendar.getInstance();
			desde.setTime((Date)ans.getCreacion());
			desde.set(Calendar.HOUR_OF_DAY, 0);
			desde.set(Calendar.MINUTE, 0);
			desde.set(Calendar.SECOND, 0);
			desde.set(Calendar.MILLISECOND, 0);
			Calendar hasta=Calendar.getInstance();
			hasta.setTime((Date)ans.getEdicion());
			hasta.set(Calendar.HOUR_OF_DAY, 23);
			hasta.set(Calendar.MINUTE, 59);
			hasta.set(Calendar.SECOND, 59);
			hasta.set(Calendar.MILLISECOND, 999);
			filtro.add(Restrictions.between("creacion", desde.getTime(), 
					hasta.getTime()));
		}
		}
		filtro.addOrder(Order.asc("id"));
		return buscar(filtro);
	}

	@Override
	public Ans obtenerAnsxEquipo(Equipo equipo) {
		return obtenerHql("select a from Ans a where equipo.id=?", equipo.getId());
	}
}
